package service

import (
	"log"
	"palms/global"
	"palms/model"
	"palms/repository"
)

type TaskService interface {

	// List 返回机器人列表
	List(task model.Task, pageNo int, pageSize int) ([]model.Task, error)

	// Get 返回机器人信息
	Get(id int64) (*model.Task, error)

	Create(task model.Task) (int64, error)

	// Delete 删除机器人信息
	Delete(id int64) error
}

func NewTaskService(repo repository.TaskRepository) TaskService {
	return &taskService{
		repo: repo,
	}
}

type taskService struct {
	repo repository.TaskRepository
}

func (s *taskService) List(task model.Task, pageNo int, pageSize int) ([]model.Task, error) {
	return s.repo.List(task, pageNo, pageSize)
}

func (s *taskService) Get(id int64) (*model.Task, error) {
	return s.repo.Get(id)
}

// Create 创建任务
// 在创建任务的同时会创建一个定时任务
func (s *taskService) Create(task model.Task) (int64, error) {
	_, err := global.Scheduler.
		Every(1).
		LimitRunsTo(1).
		StartAt(task.StartTime).
		Do(Execute)
	if err != nil {
		log.Println("创建定时任务失败" + err.Error())
		return 0, err
	}
	id, err := s.repo.Create(task)
	if err != nil {
		log.Printf("保存任务信息失败[error:%s]\n", err.Error())
		return 0, err
	}
	global.Scheduler.StartAsync()
	return id, nil
}

func (s *taskService) Delete(id int64) error {
	global.Scheduler.Remove("")
	err := s.repo.Delete(id)
	return err
}

func Execute() {
	log.Println("任务开始执行")
}
